package cn.heyige.backend.service;

import cn.heyige.backend.algorithm.PredictionResult;
import cn.heyige.backend.entity.UserDO;

/**
 * 梅花易数服务接口 - 精简版
 *
 * 专注于核心梅花易数功能，提高系统性能和可维护性
 *
 * @author CodeBuddy
 */
public interface MeihuaService {

    /**
     * 梅花易数预测和解读 - 统一入口
     *
     * @param user 用户信息（可为null）
     * @param question 用户问题
     * @return 完整的预测和解读结果
     */
    MeihuaResponse predictAndInterpret(UserDO user, String question);

    /**
     * 仅算法预测（不进行AI解读）
     *
     * @param user 用户信息（可为null）
     * @return 预测结果
     */
    PredictionResult predictOnly(UserDO user);

    /**
     * 仅AI解读（基于已有预测结果）
     *
     * @param prediction 预测结果
     * @param question 用户问题
     * @return AI解读
     */
    String interpretOnly(PredictionResult prediction, String question);

    /**
     * 梅花易数响应结果
     */
    class MeihuaResponse {
        /**
         * 预测结果
         */
        private PredictionResult prediction;
        
        /**
         * AI解读
         */
        private String interpretation;
        
        /**
         * 是否成功
         */
        private boolean success;
        
        /**
         * 错误信息
         */
        private String errorMessage;

        public MeihuaResponse(PredictionResult prediction, String interpretation, boolean success, String errorMessage) {
            this.prediction = prediction;
            this.interpretation = interpretation;
            this.success = success;
            this.errorMessage = errorMessage;
        }

        public static MeihuaResponse success(PredictionResult prediction, String interpretation) {
            return new MeihuaResponse(prediction, interpretation, true, null);
        }

        public static MeihuaResponse failure(String errorMessage) {
            return new MeihuaResponse(null, null, false, errorMessage);
        }

        public PredictionResult getPrediction() {
            return prediction;
        }

        public String getInterpretation() {
            return interpretation;
        }

        public boolean isSuccess() {
            return success;
        }

        public String getErrorMessage() {
            return errorMessage;
        }
    }
}